{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\importlib\\_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n",
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\importlib\\_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "import os\n",
    "import numpy \n",
    "import pandas\n",
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import accuracy_score\n",
    "from matplotlib import pyplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = 'C:\\\\Users\\\\62744\\\\Desktop\\\\homework3\\\\'\n",
    "data = pandas.read_csv(path+'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['bathrooms', 'bedrooms', 'price', 'price_bathrooms', 'price_bedrooms',\n",
      "       'room_diff', 'room_num', 'Year', 'Month', 'Day',\n",
      "       ...\n",
      "       'virtual', 'walk', 'walls', 'war', 'washer', 'water', 'wheelchair',\n",
      "       'wifi', 'windows', 'work'],\n",
      "      dtype='object', length=227) <class 'pandas.core.indexes.base.Index'>\n"
     ]
    }
   ],
   "source": [
    "y_train = data['interest_level']\n",
    "x_train = data.drop('interest_level', axis = 1)\n",
    "# print(x.shape)\n",
    "columns = x_train.columns\n",
    "print(columns, type(columns))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59382, std: 0.00211, params: {'subsample': 0.3, 'colsample_bytree': 0.6},\n",
       "  mean: -0.59229, std: 0.00320, params: {'subsample': 0.4, 'colsample_bytree': 0.6},\n",
       "  mean: -0.59104, std: 0.00221, params: {'subsample': 0.5, 'colsample_bytree': 0.6},\n",
       "  mean: -0.59050, std: 0.00190, params: {'subsample': 0.6, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58946, std: 0.00183, params: {'subsample': 0.7, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58913, std: 0.00289, params: {'subsample': 0.8, 'colsample_bytree': 0.6},\n",
       "  mean: -0.59427, std: 0.00193, params: {'subsample': 0.3, 'colsample_bytree': 0.7},\n",
       "  mean: -0.59165, std: 0.00270, params: {'subsample': 0.4, 'colsample_bytree': 0.7},\n",
       "  mean: -0.59023, std: 0.00308, params: {'subsample': 0.5, 'colsample_bytree': 0.7},\n",
       "  mean: -0.59002, std: 0.00292, params: {'subsample': 0.6, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58945, std: 0.00253, params: {'subsample': 0.7, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58913, std: 0.00237, params: {'subsample': 0.8, 'colsample_bytree': 0.7},\n",
       "  mean: -0.59372, std: 0.00300, params: {'subsample': 0.3, 'colsample_bytree': 0.8},\n",
       "  mean: -0.59119, std: 0.00327, params: {'subsample': 0.4, 'colsample_bytree': 0.8},\n",
       "  mean: -0.59025, std: 0.00253, params: {'subsample': 0.5, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58950, std: 0.00289, params: {'subsample': 0.6, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58872, std: 0.00231, params: {'subsample': 0.7, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58848, std: 0.00278, params: {'subsample': 0.8, 'colsample_bytree': 0.8},\n",
       "  mean: -0.59255, std: 0.00310, params: {'subsample': 0.3, 'colsample_bytree': 0.9},\n",
       "  mean: -0.59206, std: 0.00249, params: {'subsample': 0.4, 'colsample_bytree': 0.9},\n",
       "  mean: -0.59018, std: 0.00310, params: {'subsample': 0.5, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58960, std: 0.00259, params: {'subsample': 0.6, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58883, std: 0.00308, params: {'subsample': 0.7, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58893, std: 0.00208, params: {'subsample': 0.8, 'colsample_bytree': 0.9}],\n",
       " {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       " -0.5884777461954082)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=200,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=3)\n",
    "gsearch3_1.fit(x_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588478 using {'subsample': 0.8, 'colsample_bytree': 0.8}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\62744\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pandas.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = numpy.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = numpy.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
